前端那些事

vuePress-theme-reco chenpeng    2020 - 2021
前端那些事 前端那些事

Choose mode

  • dark
  • auto
  • light
首页
文章目录
  • Browser
  • CSS
  • ES6
  • JavaScript
  • Network
  • TypeScript
  • Vue
  • Vue3
  • Webpack
标签
时间轴
GitHub
author-avatar

chenpeng

85

Article

25

Tag

首页
文章目录
  • Browser
  • CSS
  • ES6
  • JavaScript
  • Network
  • TypeScript
  • Vue
  • Vue3
  • Webpack
标签
时间轴
GitHub
  • JS-API

    • new的原理
    • new和Object.create的区别
    • bind、call、apply的区别
    • 如何正确判断this的指向
    • 深拷贝与浅拷贝

new的原理

vuePress-theme-reco chenpeng    2020 - 2021

new的原理

chenpeng 2020-11-30 JS API
  1. 在内存中创建一个空对象
  2. 给这个空对象添加属性和方法(将该对象的原型指向构造函数的原型)
  3. 将构造函数的 this 指向为创建的新对象,并将参数传入
  4. 如果构造函数没有返回对象,则返回第一步创建的对象;如果构造函数有返回对象,则 this 指向构造函数返回的对象

实现原理如下:

function newObject(parent, ...args){
    let child = {}
    Object.setPrototypeOf(child, parent.prototype)
    let res = parent.apply(child, args)
    return typeof res === 'object' ? res : child
}
1
2
3
4
5
6